//package com.lry.sso.service.redis.config;
//
//import com.lry.sso.service.redis.service.RedisActuator;
//import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import redis.clients.jedis.HostAndPort;
//import redis.clients.jedis.JedisCluster;
//import redis.clients.jedis.JedisPool;
//import redis.clients.jedis.JedisPoolConfig;
//
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
///**
// * 这个是为了配合公司项目而做的一个例子，
// * 公司项目使用 CSE + spring boot，有很多不兼容的，使用spring boot starter 会出现NoClass的问题
// *
// */
//@Configuration
//@EnableConfigurationProperties(SsoRedisProperties.class)
//public class RedisConfig {
//
//    @Autowired
//    private SsoRedisProperties ssoRedisProperties;
//
//    @Bean
//    public RedisActuator redisActuator(){
//        RedisActuator redisActuator = new RedisActuator();
//        SsoRedisProperties.Cluster clusterNode = ssoRedisProperties.getCluster();
//        if(clusterNode == null){
//            redisActuator.setJedisPool(createJedisPool());
//        }else{
//            redisActuator.setJedisCluster(createJedisCluster(clusterNode.getNodes()));
//        }
//        return redisActuator;
//    }
//
//    private JedisPool createJedisPool() {
//        JedisPoolConfig config = new JedisPoolConfig();
//        config.setMaxTotal(ssoRedisProperties.getMaxTotal());
//        config.setMaxIdle(ssoRedisProperties.getMaxIdle());
//        config.setMinIdle(ssoRedisProperties.getMinIdle());
//        config.setMaxWaitMillis(ssoRedisProperties.getMaxWaitMillis());
//        config.setTestOnBorrow(ssoRedisProperties.isTestOnBorrow());
//        config.setTestOnReturn(ssoRedisProperties.isTestOnReturn());
//        config.setTestWhileIdle(ssoRedisProperties.isTestWhileIdle());
//        return new JedisPool(config, ssoRedisProperties.getHost(), ssoRedisProperties.getPort(),
//                ssoRedisProperties.getTimeout(), ssoRedisProperties.getPassword(), ssoRedisProperties.getSelect());
//    }
//
//    private JedisCluster createJedisCluster(List<String> nodes1) {
////        String[] serverArray = nodes1.split(",");
//        Set<HostAndPort> nodes = new HashSet<>();
//        for (String ipPort : nodes1) {
//
//            String[] ipPortPair = ipPort.split(":");
//            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
//        }
//        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
//        config.setMaxTotal(ssoRedisProperties.getCluster().getMaxTotal());
//        config.setMaxIdle(ssoRedisProperties.getCluster().getMaxIdle());
//        config.setMinIdle(ssoRedisProperties.getCluster().getMinIdle());
//        config.setMaxWaitMillis(ssoRedisProperties.getCluster().getMaxWaitMillis());
//        //在获取Jedis连接时，自动检验连接是否可用
//        config.setTestOnBorrow(true);
//        //在将连接放回池中前，自动检验连接是否有效
//        config.setTestOnReturn(true);
//        //自动测试池中的空闲连接是否都是可用连接
//        config.setTestWhileIdle(true);
//        //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时,默认true
//        config.setBlockWhenExhausted(ssoRedisProperties.getCluster().isBlockWhenExhausted());
//        //表示idle object evitor两次扫描之间要sleep的毫秒数
//        config.setTimeBetweenEvictionRunsMillis(30000);
//        //表示idle object evitor每次扫描的最多的对象数
//        config.setNumTestsPerEvictionRun(10);
//        //表示一个对象至少停留在idle状态的最短时间，然后才能被idle object evitor扫描并驱逐；这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
//        config.setMinEvictableIdleTimeMillis(60000);
//        //需要密码连接的创建对象方式
//        //参数依次是：集群地址，链接超时时间，返回值的超时时间，链接尝试次数，密码和配置文件
//        return new JedisCluster(nodes, ssoRedisProperties.getTimeout(), ssoRedisProperties.getCluster().getSoTimeout(),
//                ssoRedisProperties.getCluster().getMaxAttempts(), ssoRedisProperties.getCluster().getPassword(),config);
//    }
//}
